<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>姓名案例_computed实现</title>
    <script src="../../JS/vue.js"></script>
  </head>
  <body>
    <!-- 
          计算属性：
               1、定义：要用的属性不存在，要通过已有属性计算得出
               2、原理：底层借助了Object.defineproperty方法提供的getter 和setter
               3、get函数什么时候调用执行？
                      (1)、初次读取时会执行一次
                      (2)、当依赖的数据发生改变是绘本再次调用
               4、优势：与methods时限相比内部有缓存机制(复用)，效率更高，调试方便。
               5、备注：
                      1、计算属性最终会出现在vm上，直接读取使用即可
                      2、如果计算属性要被修改，那必须写set函数去响应修改，且set中要引起计算时依赖的数据发生改变     
     -->
    <div id="root">
      姓:<input type="text" v-model="firstName" /> <br />
      名:<input type="text" v-model="lastName" /> <br />
      全名:<span>{{ fullName}}</span>
    </div>
    <script>
      Vue.config.productionTip = false //阻止 vue 在启动时产生提示
      const vm = new Vue({
        el: '#root',
        data: {
          firstName: '小',
          lastName: '莫',
        },
        computed: {
          fullName: {
            // get有什么用？当有人读取fullName时，get就会被调用，且返回值就是作为fullName的值
            // get什么时候调用？1、初次读取fullName时.2、所依赖的数据发生变化是
            get() {
              return `${this.firstName}-${this.lastName}`
            },
            // set什么时候调用？当fullName被修改时。
            set(value) {
              const fullName = value.split('-')
              this.firstName = fullName[0]
              this.lastName = fullName[1]
            },
          },
        },
      })
    </script>
  </body>
</html>
